/* Contiene los namespace que luego se usaran*/
var WebKitDev = {
    Core : { }, //Estructuras básicas del framework.
    Application : {}, //Objetos comunes de toda la aplicación web
    DataBase : {}, //Implementaciones sobre la BBDD local
    UI : {}, //Implemntaciones para la interfaz de usuario
    Ajax : {}, //Implementaciones para operaciones asincronas
    Utils : {}, //Funciones estaticas del core
    Page : {}, //Funciones y variables que tienen que ver con la pagina actual
    Init : function() {//punto de entrada al core

        //Para la carga dinámica de recursos:
        WebKitDev.Dependencies = new WebKitDev.Core.Structures.Dictionary();
        WebKitDev.Dependencies.Add("Core", ["WebKitDev.Core.Structures", "WebKitDev.Core.Enums", "WebKitDev.Core.MD5"]);
        WebKitDev.Dependencies.Add("Applicarion", ["#Core","WebKitDev.Application.Server"]);
        WebKitDev.Dependencies.Add("DataBase", ["#Core","WebKitDev.DataBase.db"]);
        WebKitDev.Dependencies.Add("UI", []);
        WebKitDev.Dependencies.Add("Ajax", []);
        WebKitDev.Dependencies.Add("Utils", ["#Core", "WebKitDev.Utils.Resources"]);
        WebKitDev.Dependencies.Add("Page", []);
    },
    ReadyCallBack: null,
    Ready : function(callback) {
        if(callback)
            WebKitDev.ReadyCallBack=callback;
        var ReadyTime = 0;
        if (WebKitDev.IncludeMinimun.ReadyStatus) {
            WebKitDev.Init();
            WebKitDev.ReadyCallBack.call();
            WebKitDev.ReadyCallBack=null;
        } else
            ReadyTime = setTimeout("WebKitDev.Ready()", 500);
    },
    Include : function(NameSpace) {
        var sel = WebKitDev.Dependencies.GetValue(NameSpace);
        if (!WebKitDev.Utils.Resources) {
            //Cargar lo esctrictamente necesario, y despues volver a llamar a esta función:
            WebKitDev.IncludeMinimun.IncludeMinimunWC("WebKitDev.Include('" + NameSpace + "')");
        }
        for (var i = 0; i < sel.length; i++) {
            if (sel[i].indexOf('#') == 0)//Se trata de carga una dependencia completa:
                WebKitDev.Include(sel[i].split('#')[1]);

            WebKitDev.Utils.Resources.LoadScript(getUrl(sel[i]));
        }
        function getUrl(_nameSpace) {
            var path = _nameSpace.split(".");
            return "/js/" + path.join("/") + ".js";
        }

    },
    IncludeMinimun : {
        //Scripts a cargar en la configuración mínima:
        minimun : [
        "Core/Structures.js"
        ,"Core/Enums.js"
        ,"Core/MD5.js"
        ,"Utils/Resources.js"
        ,"Application/Server.js"],
        callBack: null,
        IncludeMinimunWC:function(callBack) {
            this.callBack=callBack;
            for (var i = 0; i < this.minimun.length; i++) {
                this.include(this.minimun[i]);
            }
        },
        loaded : 0,
        ReadyStatus : false,
        include: function (file) {
            var script = document.createElement("script");
            script.type = "text/javascript";
            script.Name = file;
            if (script.readyState) {//IE
                script.onreadystatechange = function() {
                    if (script.readyState == "loaded" || script.readyState == "complete") {
                        script.onreadystatechange = null;
                         WebKitDev.IncludeMinimun.addFile();
                    }
                };
            } else {//Others
                script.onload = function() {
                    WebKitDev.IncludeMinimun.addFile();
                };
            }
            //Raiz del servidor:
            var servRoot = document.location.href.split('/');
            servRoot.pop();
            servRoot = servRoot.join('/');
            script.src = servRoot+WebKitDev.Config.RootToFramework + file;
            document.getElementsByTagName("head")[0].appendChild(script);
        },

        addFile: function () {
            this.loaded++;
            if (this.loaded == this.minimun.length)
                this.callBack.call();
        }
        ,
        AddMinimun : function() {
            if (WebKitDev.Utils.Resources) {
                for (var i = 0; i < WebKitDev.IncludeMinimun.minimun.length; i++) {
                    var reso = new WebKitDev.Core.Structures.Resource(null, WebKitDev.IncludeMinimun.minimun[i]);
                    WebKitDev.Utils.Resources.ScriptsLoaded.Add(reso.Name, reso);
                }
                WebKitDev.IncludeMinimun.ReadyStatus = true;
            }
        }
    }
}
//Configuracion del framework:
WebKitDev.Config={
    RootToFramework: "/js/WebKitDev/"
}

WebKitDev.IncludeMinimun.IncludeMinimunWC(WebKitDev.IncludeMinimun.AddMinimun);
WebKitDev.Ready();

